//
//  FengSiriService.h
//  FengSiriDemo
//
//  Created by Feng on 2021/7/26.
//

#import <Foundation/Foundation.h>
#import <Intents/Intents.h>

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSUInteger, MSLSiriServiceAddResult) {
    MSLSiriServiceAddResultSuccess  = 0, // 添加成功
    MSLSiriServiceAddResultCancel   = 1, // 用户取消添加
    MSLSiriServiceAddResultFailure  = 2, // 添加失败
    MSLSiriServiceAddResultErrorJsonInfo = 3, // jsonInfo 内容不正确
};

typedef NS_ENUM(NSUInteger, MSLSiriServiceEditResult) {
    MSLSiriServiceEditResultSuccess = 0, // 用户编辑成功
    MSLSiriServiceEditResultCancel  = 1, // 用户取消编辑
    MSLSiriServiceEditResultFailure = 2, // 编辑失败
    MSLSiriServiceDelResultSuccess  = 3, // 用户删除成功
    MSLSiriServiceEditResultErrorJsonInfo = 4, // jsonInfo 内容不正确
};


// 标记不能被继承
__attribute__ ((objc_subclassing_restricted))

@interface FengSiriService : NSObject<NSCopying,NSMutableCopying>


/// 场景控制意图类名
@property (nonatomic, strong) NSString *sceneIntentClassName;


+(instancetype)shareInstance;

/**
 是否使用SiriKit功能
 */
-(void)canUseSiriKitWithCompeletion:(void(^)(BOOL enable))compeletion;

/**
 获取Siri用户授权权限
 authStatus
 0：用户未确定；
 1：此应用程序无权使用 Siri 服务。 由于 Siri 服务受到有效限制, 用户无法更改此状态, 并且可能没有个人拒绝授权；
 2：用户拒绝授权或者Siri功能在设置中被禁用；
 3：用户已授权。
 @return 状态码 INSiriAuthorizationStatus
 */
-(INSiriAuthorizationStatus)getSiriAuthStatus;

/**
 请求用户授权Siri使用权限
 @param compeletion  授权状态回调 INSiriAuthorizationStatus

 */
- (void)requestSiriAuthWithCompeletion:(void (^)(INSiriAuthorizationStatus status))compeletion;

/**
 
 intentType：SceneControlIntent
 获取指定意图类型的shortcut列表
 eg:场景shortcut列表
 [
     {
         "sceneId":"xxxx",
         "siriId":"xxss"，
         ”invocationPhrase“:"打开加湿器"
     },
     {
         "sceneId":"xxxx",
         "siriId":"xxss"，
         ”invocationPhrase“:"打开空调"
     },
 ]
 @param intentType 意图类型
 @param compeletion 回调
 */
- (void)getShortcutList:(NSString *)intentType compeletion:(void (^)(NSArray<NSDictionary *> *list))compeletion;

/**
 添加shortcut
 
 @param jsonInfo shortcut详细信息
 {
    "intentType" : "SceneControlIntent", // 意图类型
    "shortcutInfo" : {
        "sceneId" : "41349",     // 意图详细参数
        "sceneName" : "客厅灯开",
    }
 }
 @param compeletion 添加完成的回调
 */
- (void)addSiriShortcut:(NSDictionary *)jsonInfo compeletion:(void (^)(MSLSiriServiceAddResult resultCode, NSString * _Nonnull msg))compeletion ;

/**
 编辑shortcut
 @param jsonInfo shortcut详细信息
 eg:编辑场景shortcut
 {
    "intentType" : "MSLSceneControlIntent", // 意图类型
    "shortcutInfo" : {
        "sceneId" : "41349", // 意图详细参数
        "siriId" : "0"
    }
 }
 @param compeletion 编辑完成的回调
 */
- (void)editShortcut:(NSDictionary *)jsonInfo compeletion:(void (^)(MSLSiriServiceEditResult resultCode, NSString * _Nonnull msg,  NSString *invocationPhrase))compeletion API_AVAILABLE(ios(12.0));

/**
 捐赠交互产生的有可能添加为shortcut的用户信息，用于记录用户操作习惯，比如用户每天6点打开回家模式， 在多次使用后，Siri会推荐用户添加场景触发的shortcut，在H5中，新增场景后即可调用该接口
 @param jsonInfo shortcut详细信息，jsonInfo 数据结构：
 {
    "intentType" : "MSLSceneControlIntent", // 意图类型
    "shortcutInfo" : {
        "invocationPhrase": "打开客厅灯", // 建议用户使用的短语内容，可不传
        "sceneId" : "41349", // 意图详细参数
        "sName" : "客厅灯开",
        "houseId" : "80"
    }
 }
 */
- (void)donateInteraction:(NSDictionary *)jsonInfo API_AVAILABLE(ios(12.0));

/**
 移除用户捐赠（有可能添加为shortcut的用户信息），在H5中，删除场景时调用

 @param donationId 在场景快捷方式中传houseId(80)+sceneId(44233)=8044233的拼接字符串即可
 */
- (void)removeDonation:(NSString *)donationId API_AVAILABLE(ios(12.0));

@end

NS_ASSUME_NONNULL_END
